/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package WSO;

import beans.AfiliadoBean;
import beans.Bean;
import beans.CartillaProfesionalesBean;
import beans.NovedadBean;
import beans.PrestadoraBean;
import beansSerializable.AfiliadoSerializable;
import beansSerializable.CartillaProfesionalesSerializable;
import beansSerializable.Lista;
import daos.Dao;
import daos.DaoFactory;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlSeeAlso;
import ws.TurnoEntreFechasSerializable;
import ws.TurnosDisponiblesSerializable;

/**
 *
 * @author C
 */
@WebService(serviceName = "OSWS3")
@XmlSeeAlso({AfiliadoSerializable.class})
public class OSWS3 {

    private String db = "dbObraSocial3";

   @WebMethod(operationName = "login")
    public AfiliadoSerializable login( AfiliadoSerializable  id ) {
        try {
            Dao dao = DaoFactory.getDao("Afiliado",db);        
            AfiliadoBean a = id.getBean();
            a = (AfiliadoBean) dao.get(a);          
            AfiliadoSerializable as= new AfiliadoSerializable ();
            as.setBean(a);           
            return  as;
        } catch (Exception ex) {
            Logger.getLogger(OSWS1.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    } 
    
    @WebMethod(operationName = "returnCartilla")
    public List <CartillaProfesionalesSerializable> returnCartilla()
    {
        try {
            Dao dao = DaoFactory.getDao("CartillaProfesionales",db);            
            ArrayList<Bean> cartillaProfesionales =  (ArrayList<Bean>) dao.select(null);
            Lista listaS= new Lista ();
            List <CartillaProfesionalesSerializable> listaCartilla= new ArrayList<>();
            listaCartilla=listaS.listarCartilla(cartillaProfesionales);               
            return  listaCartilla;            
        } catch (Exception ex) {
            Logger.getLogger(OSWS1.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }  


    @WebMethod(operationName = "returnNovedades")
    public String returnNovedades( )
    {
        try {
            Dao dao = DaoFactory.getDao("Novedades",db);   
            ArrayList <Bean> novedad = (ArrayList <Bean>) dao.select(null);
            //AfiliadoBean a= new AfiliadoBean(1);
           NovedadBean n = (NovedadBean)novedad.get(0);
            return("Novedad " + n.getIdNovedad()+ n.getDescripcion() + n.getAutor() + n.getFecha());
             
        } catch (Exception ex) {
            Logger.getLogger(OSWS1.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
     @WebMethod(operationName = "buscarTurnos")
    public  List <ws.TurnosDisponiblesSerializable> buscarTurnos( ws.TurnoEntreFechasSerializable  id ) {
        Class serviceClass, portClass;
        Object service, port;
        Method metGetPort, metGetTurno;  
        List <ws.TurnosDisponiblesSerializable> listaTurno = new ArrayList<ws.TurnosDisponiblesSerializable>(); 
        try {
            Dao dao = DaoFactory.getDao("Prestdora",db); 
            ArrayList<Bean> listaPresdora = (ArrayList<Bean>) dao.select(null); 
            Iterator it = listaPresdora.iterator();
            while(it.hasNext()){
                PrestadoraBean pBean=  (PrestadoraBean) it.next();
                serviceClass = Class.forName("ws."+pBean.getAccesoWS()+"_Service");
                portClass = Class.forName("ws." +pBean.getAccesoWS());
                service = serviceClass.newInstance();
                metGetPort    = serviceClass.getMethod("get"+pBean.getAccesoWS()+"Port", (Class[]) null);                
                Class[] cArg = new Class[1];
                cArg[0] = TurnoEntreFechasSerializable.class;                  
                port   = (Object) metGetPort.invoke(service, (Object[]) null);
                metGetTurno = portClass.getMethod("buscarTurnos", cArg);
                List <TurnosDisponiblesSerializable> aux = new ArrayList<TurnosDisponiblesSerializable>();                 
                listaTurno =  (List<TurnosDisponiblesSerializable>) metGetTurno.invoke(port, id);
                listaTurno = anexarLista(aux,listaTurno);
            }             
        } catch (Exception ex) { 
            
            System.out.println("Error    " + ex.getMessage());
        }
        finally {
            return listaTurno;
        }       
    } 
    
     private List <ws.TurnosDisponiblesSerializable> anexarLista( List <ws.TurnosDisponiblesSerializable> aux,List <ws.TurnosDisponiblesSerializable> lista){
        Iterator it = aux.iterator();
        while(it.hasNext()) {
            lista.add((ws.TurnosDisponiblesSerializable)it.next());
        }  
             return lista;            
    }
}
